package com.learn.finished;

import java.util.Arrays;

/*
给你一个整型数组 nums ，在数组中找出由三个数组成的最大乘积，并输出这个乘积。

其实就是找到最大的三个数，那么
排序
线性扫描---通过扫描一遍数组，找到最大的数，即处于边缘的极值

 */
public class num_628 {
    public static int maximumProduct(int[] nums) {
        int len = nums.length;
        Arrays.sort(nums);
        return Math.max(nums[len - 1] * nums[len - 2] * nums[len - 3], nums[0] * nums[1] * nums[len - 1]);
        //其实就是找五个值，最大的三个值和最小的两个值---线性扫描

    }

    public static int maximumProduct1(int[] nums) {
        int min1 = Integer.MAX_VALUE, min2 = Integer.MAX_VALUE;
        int max1 = Integer.MIN_VALUE, max2 = Integer.MIN_VALUE, max3 = Integer.MIN_VALUE;
        for (int num : nums) {
            if (num < min1) {
                min2 = min1;
                min1 = num;
            } else if (num < min2) {
                min2 = num;
            }
            if (num > max1) {
                max3=max2;
                max2=max1;
                max1=num;
            }else if(num>max2){
                max3=max2;
                max2=num;
            }else if (num>max3){
                max3=num;
            }
        }
        return Math.max(min1*min2*max1,max1*max2*max3);

    }

}
